<%
=begin
apps: kubeapps
platforms: kubernetes, tanzu-application-catalog
id: expose_service
title: Expose Kubeapps service
category: configuration
weight: 40
=end %>

> NOTE: The Kubeapps frontend sets up a proxy to the Kubernetes API service, so when when exposing the Kubeapps service to a network external to the Kubernetes cluster (perhaps on an internal or public network), the Kubernetes API will also be exposed on that network. See the [issues section](https://github.com/kubeapps/kubeapps/issues/1111) for more details.

### LoadBalancer Service

The simplest way to expose the Kubeapps Dashboard is to assign a LoadBalancer type to the Kubeapps frontend Service. For example, you can use the following parameter: frontend.service.type=LoadBalancer

Wait for your cluster to assign a LoadBalancer IP or Hostname to the kubeapps Service and access it on that address:

~~~
$ kubectl get services --namespace kubeapps --watch
~~~

### Ingress

This chart provides support for ingress resources. If you have an ingress controller installed on your cluster, such as [nginx-ingress](https://hub.kubeapps.com/charts/stable/nginx-ingress) or [traefik](https://hub.kubeapps.com/charts/stable/traefik) you can utilize the ingress controller to expose Kubeapps.

To enable ingress integration, please set ingress.enabled to *true*.

#### Hosts

Most likely you will only want to have one hostname that maps to this Kubeapps installation (use the ingress.hostname parameter to set the hostname), however, it is possible to have more than one host. To facilitate this, the ingress.extraHosts object is an array.

#### Annotations

For annotations, please see this document. Not all annotations are supported by all ingress controllers, but this document does a good job of indicating which annotation is supported by many popular ingress controllers. Annotations can be set using ingress.annotations.

### TLS

To enable TLS, please set ingress.tls to true. When enabling this parameter, the TLS certificates will be retrieved from a TLS secret with name INGRESS_HOSTNAME-tls (where INGRESS_HOSTNAME is a placeholder to be replaced with the hostname you set using the ingress.hostname parameter).

You can use the ingress.extraTls to provide the TLS configuration for the extra hosts you set using the ingress.extraHosts array. Please see this [example](https://kubernetes.github.io/ingress-nginx/examples/tls-termination/) for more information.

You can provide your own certificates using the ingress.secrets object. If your cluster has a cert-manager add-on to automate the management and issuance of TLS certificates, add to *ingress.annotations* the [corresponding ones](https://cert-manager.io/docs/usage/ingress/#supported-annotations) for cert-manager. For a full list of configuration parameters related to configuring TLS can see the [*values.yaml*](https://github.com/bitnami/charts/blob/master/bitnami/kubeapps/values.yaml) file.
